'use strict';
Object.defineProperty(exports, '__esModule', {value: true});
exports.useChildren = exports.useParent = void 0;

function useParent(name, onEffect) {
    var _a;
    var path = '../' + name + '/index';
    return {
        relations:
            ((_a = {}),
                (_a[path] = {
                    type: 'ancestor',
                    linked: function () {
                        onEffect && onEffect.call(this);
                    },
                    linkChanged: function () {
                        onEffect && onEffect.call(this);
                    },
                    unlinked: function () {
                        onEffect && onEffect.call(this);
                    },
                }),
                _a),
        mixin: Behavior({
            created: function () {
                var _this = this;
                Object.defineProperty(this, 'parent', {
                    get: function () {
                        return _this.getRelationNodes(path)[0];
                    },
                });
                Object.defineProperty(this, 'index', {
                    // @ts-ignore
                    get: function () {
                        var _a, _b;
                        return (_b =
                            (_a = _this.parent) === null || _a === void 0
                                ? void 0
                                : _a.children) === null || _b === void 0
                            ? void 0
                            : _b.indexOf(_this);
                    },
                });
            },
        }),
    };
}

exports.useParent = useParent;

function useChildren(name, onEffect) {
    var _a;
    var path = '../' + name + '/index';
    return {
        relations:
            ((_a = {}),
                (_a[path] = {
                    type: 'descendant',
                    linked: function (target) {
                        onEffect && onEffect.call(this, target);
                    },
                    linkChanged: function (target) {
                        onEffect && onEffect.call(this, target);
                    },
                    unlinked: function (target) {
                        onEffect && onEffect.call(this, target);
                    },
                }),
                _a),
        mixin: Behavior({
            created: function () {
                var _this = this;
                Object.defineProperty(this, 'children', {
                    get: function () {
                        return _this.getRelationNodes(path) || [];
                    },
                });
            },
        }),
    };
}

exports.useChildren = useChildren;
